package com.ruoyi.web.sso.service;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.web.sso.domain.Group;
import com.ruoyi.web.sso.domain.vo.RedisDetails;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @date 2021-10-28
 */
public interface IRedisUtilService
{
    /**
     * redis赋值
     * @param staffId
     * @param platformId
     * @return
     */
    public String setTicket(String staffId, String platformId);

    /**
     * redis赋值
     * @return
     */
    public String setValue(String key, String value);
    /**
     * 取值
     * @param ticket
     * @return
     */
    public RedisDetails getTicket(String ticket);

    /**
     *取值
     * @param staffId
     * @param platformId
     * @return
     */
    String getTicket(String staffId, String platformId);

    /**
     * 删除
     */
    public void deleteTicket(String staffId, String platformId);


    /**
     * 删除
     * @param ticket
     */
    public void deleteTicket(String ticket);
    /**
     * 设置键的过期时间
     * @param key 键
     * @param timeout 过期时间
     * @param unit 时间单位（如：TimeUnit.SECONDS）
     * @return 是否设置成功
     */
    boolean expire(String key, long timeout, TimeUnit unit);

    /**
     * 原子递增操作
     * @param key 键
     * @return 递增后的值（若键不存在则初始化为1）
     */
    Long incr(String key);

    /**
     * 设置键值对（支持泛型）
     * @param key 键
     * @param value 值
     * @param timeout 过期时间
     * @param unit 时间单位
     * @return 设置的值
     */
    <T> T set(String key, T value, long timeout, TimeUnit unit);


    /**
     * 删除指定的 key（支持批量删除）
     * @param keys 要删除的 key 列表
     * @return 删除成功的 key 数量
     */
    Long delete(String... keys);

    /**
     * 检查 key 是否存在
     * @param key 要检查的 key
     * @return true 表示存在，false 表示不存在
     */
    boolean exists(String key);

    String get(String redisKey);
}
